package com.linghu.qqclient.service;

import com.linghu.qqcommon.Message;
import com.linghu.qqcommon.MessageType;
import com.linghu.qqcommon.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @author 令狐荣豪
 * @version 1.0
 * 完成用户注册登录验证
 */
public class UserClientService {

    private User u=new User();
    private Socket socket;

    //根据userID和pwd到服务器验证该用户是否合法
    public boolean checkUser(String userId,String pwd) throws UnknownHostException {
        boolean b=false;
        //创建User对象
        u.setUserId(userId);
        u.setPasswd(pwd);
        //连接到服务端，发送u对象
        try {
            socket = new Socket(InetAddress.getLocalHost(), 9999);
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(u);//发送User对象

            //读取从服务器回复的message对象
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            Message ms=(Message)ois.readObject();
            if (ms.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCEED)){
                b=true;
                //登录OK
                //创建一个和服务器连接的通信的线程->创建一个类ClientConnectServerThread
                ClientConnectServerThread ccst = new ClientConnectServerThread(socket);
                //启动客户端的线程
                ccst.start();
                //为了后面客户端的扩展，我们将线程放入到集合中进行管理
                ManagerClientConnectServerThread.addClientConnectServerThread(userId,ccst);
                b=true;

            }else {
                //登录失败,我们就不能启动和服务器通信的线程，关闭socket
                socket.close();
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return b;
    }
    
    //向服务器端请求在线用户列表
    public void onlineFriends() throws IOException {
        
        //发送一个message，类型为MESSAGE_GET_ONLINE_FRIEND
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_GET_ONLINE_FRIEND);
        message.setSender(u.getUserId());
        //发送给服务器
        //从管理线程的集合中，通过userID，得到这个线程对象
        ClientConnectServerThread clientConnectServerThread=ManagerClientConnectServerThread.getClientConnectServerThread(u.getUserId());
        //通过这个线程对象得到关联的socket
        Socket socket=clientConnectServerThread.getSocket();
        //应该得到当前线程的Socket对应的ObjectOutPutStream
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        oos.writeObject(message);//发送一个Message对象，向服务端要求在线用户列表
    }
}
